package com.atcumt.lcSolution;

public class LC10 {

    public static void main(String[] args) {
        LC10 lc10 = new LC10();
        String s = new String("-91283472332");
        int res = lc10.myAtoi(s);
        System.out.println(res);
    }

    /**
     * 字符串转整数
     * 输入：s = " -042"
     * 输出：-42
     * 解释：
     * 第 1 步：读入前导空格，但忽视掉
     * 第 2 步：读入 '-' 字符，所以结果应该是负数
     * 第 3 步：读入 "042"，在结果中忽略前导零
     * @param s
     * @return
     */
    public int myAtoi(String s) {
        char[] charArray = s.toCharArray();
        int n = charArray.length;
        int index = 0;
        // 去掉字符串数组charArray中的前导空格
        while (index < n && charArray[index] == ' ') {
            index++;
        }
        if (index == n) {
            return 0; // 去掉空格后到末尾
        }
        // 判断正负，使用flag标识负数
        boolean flag = false;
        if (charArray[index] == '-') {
            index++;
            flag = true;
        } else if (charArray[index] == '+') {
            index++;
        } else if (!Character.isDigit(charArray[index])) {
            return 0;
        }

        // 识别数字，字符串转整数
        int res = 0;
        while (index < n && Character.isDigit(charArray[index])) {
            // 舍入
            if (res > (Integer.MAX_VALUE - (charArray[index] - '0')) / 10 ){
                return flag ? Integer.MIN_VALUE : Integer.MAX_VALUE;
            }
            res = res * 10 + charArray[index] - '0';
            index++;
        }
        return flag ? -res : res;
    }
}
